using System;
using System.Globalization;
using System.Threading;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using System.Xml;
using System.Reflection;
using Services;
using Utilities.Menu.UIElements;
using Services.Menu;
using Utilities.Menu;
using System.Collections.ObjectModel;
using SuperTicTacToe.Resources;

namespace SuperTicTacToe
{


    public class SuperTicTacToeGame : Microsoft.Xna.Framework.Game
    {
        public static int DEFAULT_SCR_WIDTH = 800;
        public static int DEFAULT_SCR_HEIGHT = 480;

        GraphicsDeviceManager graphics;
        SpriteBatch sprite_batch;

        public SuperTicTacToeGame()
        {
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";
            StateManager StateManager = new StateManager(this, graphics);
            this.Services.AddService(typeof(AStateManager), StateManager);

            Strings.Culture = CultureInfo.CurrentCulture;

            graphics.SupportedOrientations = DisplayOrientation.Portrait;
            graphics.PreferredBackBufferWidth = 480;
            graphics.PreferredBackBufferHeight = 800;

#if WINDOWS || XBOX
            //graphics.PreferredBackBufferWidth = 480;
            //graphics.PreferredBackBufferHeight = 800;
            graphics.IsFullScreen = false;
#else
            //graphics.PreferredBackBufferWidth = 480;
            //graphics.PreferredBackBufferHeight = 800;
            graphics.IsFullScreen = true;
#endif

            SoundTrackManager.Volume = 1.0f;
            StateManager.SelectIntroScreen();


            IsMouseVisible = true;
            IsFixedTimeStep = true;
            TargetElapsedTime = TimeSpan.FromSeconds(1.0 / 30.0);

            graphics.SynchronizeWithVerticalRetrace = true;
            //facciamo partire la colonna sonora




            //st_manager.Play();

        }

        protected override void Initialize()
        {
            sprite_batch = new SpriteBatch(GraphicsDevice);
            Services.AddService(typeof(SpriteBatch), sprite_batch);
            base.Initialize();
        }

        protected override void LoadContent()
        {
            base.LoadContent();
        }

        protected override void Dispose(bool disposing)
        {
            this.Services.RemoveService(typeof(SpriteBatch));
            base.Dispose(disposing);
        }

        internal void Draw()
        {
            this.Draw(new GameTime(TimeSpan.Zero, TimeSpan.Zero));
        }
    }
}



//using System;
//using System.Collections.Generic;
//using System.Linq;
//using Microsoft.Xna.Framework;
//using Microsoft.Xna.Framework.Audio;
//using Microsoft.Xna.Framework.Content;
//using Microsoft.Xna.Framework.GamerServices;
//using Microsoft.Xna.Framework.Graphics;
//using Microsoft.Xna.Framework.Input;
//using Microsoft.Xna.Framework.Input.Touch;
//using Microsoft.Xna.Framework.Media;

//namespace SuperTicTacToe
//{
//    /// <summary>
//    /// This is the main type for your game
//    /// </summary>
//    public class Game1 : Microsoft.Xna.Framework.Game
//    {
//        GraphicsDeviceManager graphics;
//        SpriteBatch spriteBatch;

//        public Game1()
//        {
//            graphics = new GraphicsDeviceManager(this);
//            Content.RootDirectory = "Content";

//            // Frame rate is 30 fps by default for Windows Phone.
//            //TargetElapsedTime = TimeSpan.FromTicks(333333);
//        }

//        /// <summary>
//        /// Allows the game to perform any initialization it needs to before starting to run.
//        /// This is where it can query for any required services and load any non-graphic
//        /// related content.  Calling base.Initialize will enumerate through any components
//        /// and initialize them as well.
//        /// </summary>
//        protected override void Initialize()
//        {
//            // TODO: Add your initialization logic here

//            base.Initialize();
//        }

//        /// <summary>
//        /// LoadContent will be called once per game and is the place to load
//        /// all of your content.
//        /// </summary>
//        protected override void LoadContent()
//        {
//            // Create a new SpriteBatch, which can be used to draw textures.
//            spriteBatch = new SpriteBatch(GraphicsDevice);
//            Components.Add(new Level(this));
//            // TODO: use this.Content to load your game content here
//        }

//        /// <summary>
//        /// UnloadContent will be called once per game and is the place to unload
//        /// all content.
//        /// </summary>
//        protected override void UnloadContent()
//        {
//            // TODO: Unload any non ContentManager content here
//        }

//        /// <summary>
//        /// Allows the game to run logic such as updating the world,
//        /// checking for collisions, gathering input, and playing audio.
//        /// </summary>
//        /// <param name="gameTime">Provides a snapshot of timing values.</param>
//        protected override void Update(GameTime gameTime)
//        {
//            // Allows the game to exit
//            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
//                this.Exit();

//            // TODO: Add your update logic here

//            base.Update(gameTime);
//        }

//        /// <summary>
//        /// This is called when the game should draw itself.
//        /// </summary>
//        /// <param name="gameTime">Provides a snapshot of timing values.</param>
//        protected override void Draw(GameTime gameTime)
//        {
//            GraphicsDevice.Clear(Color.CornflowerBlue);

//            // TODO: Add your drawing code here

//            base.Draw(gameTime);
//        }
//    }
//}
